<?php
class UserAuthHelper
{
	public static $user = array();
	
	/**  验证用户登陆  */
	public static function doLogin($usernm, $passwd, &$msg='')
	{
		$user = User::getByAccount($usernm);
		if($user && 0===strcmp(self::encrypt($passwd), $user['passwd'])) {                                        
			if($user['is_disa']){
				$msg = '账号被禁用';
				CheckinHelper::track($user['id'], $user['account'], CheckinHelper::STATUS_DISA);
				return false;
			}
			elseif(CheckinHelper::isPasswdExpired($user['id'])){
				$msg = '密码已过期';
				CheckinHelper::track($user['id'], $user['account'], CheckinHelper::STATUS_PASSWD);
				return false;
			}elseif(self::checkLoginRepeat($user)){
                                $msg = '该用户已经登陆,系统不允许用户同时登陆';
				//CheckinHelper::track($user['id'], $user['account'], CheckinHelper::STATUS_FAIL);
				return false;
                        }
			self::recordLogin($user);
			CheckinHelper::track($user['id'], $user['account'], CheckinHelper::STATUS_OK);
			return true;
		}
		else {
			$msg = '登陆失败，用户名或密码错误';
			if($user){
				CheckinHelper::track($user['id'], $user['account'], CheckinHelper::STATUS_FAIL);
			}
			else{
				CheckinHelper::track(0, $usernm, CheckinHelper::STATUS_FAIL);
			}
			return false;
		}
	}
	
	public static function doLogout() {
		if(isset($_SESSION['UID'])){
                        User::update($_SESSION['UID'], array('mix'=> 0)); //在线时间清0
			CheckinHelper::track(UserAuthHelper::uid(), UserAuthHelper::account(), CheckinHelper::STATUS_LOGOUT);
			unset($_SESSION['UID']);                        
		}
		return true;
	}
	
//	/**  检查用户是否需要登陆  */
//	public static function authenticate()
//	{
//		if(empty($_SESSION['USER']))
//		{
//			Controller::redirect('user-login/r/'.base64_encode($_SERVER['REQUEST_URI']));
//		}
//	}
	
	/** 是否登陆 */
	public static function isLogin() {
//               if(self::uid())
//               {
//                   $_user = User::get(self::uid());
//                   $user = User::getByAccount($_user['account']);
//                   if($user['mix']>0 && (time()-$user['mix'])> 15*60)
//                   {
//                       self::doLogout();
//                       return false;
//                   }
//                   else
//                   {
//                       return true;
//                   }
//                   
//               }
//               else
//               {
//                   return false;
//               }
		return self::uid() ? true : false;
	}

	public static function uid() {
		return empty($_SESSION['UID']) ? 0 : $_SESSION['UID'];
	}
	
	public static function name(){
		return self::getUser() ? self::$user['name'] : null;
	}
	
	public static function account(){
		return self::getUser() ? self::$user['account'] : null;
	}

	public static function deptid(){
		return self::getUser() ? self::$user['dept_id'] : null;
	}
	
	/**  用于加密密码  */
	public static function encrypt($passwd) {
		return md5($passwd);
	}
	
	/** 强度密码验证 */
	public static function isValidPasswd($passwd){
		if(!preg_match('~^[\w]{6,20}$~', $passwd) || preg_match('~^\d+|[a-zA-Z]+$~', $passwd)) {
			return false;
		}
		return true;
	}

	/**
	 * 简单的验证当前用户是否为管理员
	 */
	public static function isAdmin()
	{
		return self::uid()==1;
	}

	/**
	 * 返回当前登陆的用户信息
	 */
	public static function getUser(){
		if(!self::$user){
			self::$user = User::get(self::uid());
		}
		return self::$user;
	}
        
         /**  追加用户登陆记录 和session */
	public static function updateLoginTime($userid) {
                User::update($userid, array('mix'=> time())); //更新当前时间
		//可以再做其它操作
		return true;
	}
        

	//------------------PROTECTED METHOD BELOW---------------------
	
	/**  追加用户登陆记录 和session */
	protected static function recordLogin(array $user) {
		$_SESSION['UID'] =  $user['id'];
               self::updateLoginTime($user['id']); //更新当前时间
		//可以再做其它操作
		return true;
	}
        
       
        
	/**  检查用户是否重复登陆 */
	protected static function checkLoginRepeat(array $user) {
		if($user['mix']>0  && (time()-$user['mix'])< LOGINTIMEUPDATE) //最后更新时间与当前时间比较,小于更新时间                        
                {                    
                    return true;
                }
		//可以再做其它操作
		return false;
	}
}
?>
